package com.rollCall.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rollCall.entity.Class;
import com.rollCall.entity.vo.ClassVo;
import com.rollCall.entity.vo.ClazzStudentVo;
import com.rollCall.entity.result.PageResult;
import com.rollCall.entity.result.Result;
import com.rollCall.service.ClassService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @date 2025/2/5
 */
@RestController
@RequestMapping("/admin/class")
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
public class ClassController {
	private final ClassService classService;

	/**
	 * 根据班级ID获取班级及其学生信息
	 *
	 * @param id 班级ID
	 * @return 包含班级及其学生信息的结果对象
	 */
	@GetMapping("/{id}")
	public Result<ClazzStudentVo> getClassById(@PathVariable Long id) {
		return Result.success(classService.getClassById(id));
	}

	/**
	 * 分页查询班级列表
	 *
	 * @param pageNum  当前页码
	 * @param pageSize 每页显示的数量
	 * @return 包含分页班级信息的结果对象
	 */
	@GetMapping("/list/{pageNum}/{pageSize}")
	public PageResult<ClassVo> getClazz(@PathVariable int pageNum, @PathVariable int pageSize) {
		Page<Class> page = new Page<>(pageNum, pageSize);
		return classService.getAllClasses(page);
	}

	/**
	 * 添加新的班级
	 *
	 * @param classEntity 班级实体对象
	 * @return 操作结果
	 */
	@PostMapping("/add")
	public Result<Class> addClass(@RequestBody Class classEntity) {
		// 防止透传，确保新添加的班级ID为空
		classEntity.setId(null);
		return Result.success(classService.addClass(classEntity));
	}

	/**
	 * 根据班级ID删除班级
	 *
	 * @param id 班级ID
	 * @return 操作结果
	 */
	@DeleteMapping("/delete/{id}")
	public Result<Void> deleteClass(@PathVariable Long id) {
		classService.deleteClass(id);
		return Result.success();
	}

	/**
	 * 获取所有班级列表
	 *
	 * @return 包含所有班级信息的结果对象
	 */
	@GetMapping("/list")
	public Result<List<Class>> list() {
		return Result.success(classService.list());
	}

}
